﻿﻿// ## 2023/05/16 # 江东新风 # 为了适配血色，调整头像位置，并将该文件设为核心文件 ##
// ## 2022/03/17 # 江东新风 # 关平老年头像错误 ##
// ## 2021/10/01 # 江东新风 # 官职条件错误修复 ##
// ## 2021/09/19 # 江东新风 # 改写高位判断逻辑，简化代码 ##
// ## 2020/12/24 # 江东新风 # 修复trace参数报错 ##
// ## 2020/07/26 ##
/*
@제작자: HoneyBee
@설명: 무장의 공적이 일정 수준이상이 되었을 경우에 [군주/도독] 신분이거나 [평북장군] 이상의 관직이면 고위 일러스트로 자동 변경되는 SCRIPT


※ 무장들의 老年은 50세로 통일 (각 무장마다 취향에 맞게 변경하셔도 됩니다.)
※ 조조, 유비, 유선, 손견, 손책, 손권, 원소, 원술은 군주 신분이면서 세력의 작위가 王 이상이어야 변경됨
※ GOLD EDITION PATCH에 동봉된 FACE DATA를 활용하셔야 정상적으로 반영됩니다. (중요)


*/

namespace 升官容貌变更
{

	// ================ CUSTOMIZE ================

	const int 功绩门槛 = 20000; 		  // 공적이 12000 이상인 경우
	const int 官职条件 = 官职_平北将军; 		  // 관직이 평북장군 이상인 경우

	const array<array<int>> 容貌设定 =
	{
	{武将_袁术,/*老年*/-1,/*高位青年*/1000,/*高位老年*/1001},
	{武将_袁绍,/*老年*/-1,/*高位青年*/1002,/*高位老年*/1003},
	{武将_贾诩,/*老年*/-1,/*高位青年*/1004,/*高位老年*/1005},
	{武将_郭嘉,/*老年*/-1,/*高位青年*/1006,/*高位老年*/1007},
	{武将_乐进,/*老年*/-1,/*高位青年*/1008,/*高位老年*/1009},
	{武将_夏侯渊,/*老年*/-1,/*高位青年*/1010,/*高位老年*/1011},
	{武将_夏侯惇,/*老年*/1012,/*高位青年*/1013,/*高位老年*/1014},
	{武将_关羽,/*老年*/1015,/*高位青年*/1016,/*高位老年*/1017},
	{武将_甘宁,/*老年*/1018,/*高位青年*/1019,/*高位老年*/1020},
	{武将_关平,/*老年*/-1,/*高位青年*/1021,/*高位老年*/-1},
	{武将_颜良,/*老年*/-1,/*高位青年*/1022,/*高位老年*/1023},
	{武将_魏延,/*老年*/-1,/*高位青年*/1024,/*高位老年*/1025},
	{武将_姜维,/*老年*/1026,/*高位青年*/1027,/*高位老年*/1028},
	{武将_许褚,/*老年*/-1,/*高位青年*/1029,/*高位老年*/1030},
	{武将_黄盖,/*老年*/-1,/*高位青年*/1031,/*高位老年*/1032},
	{武将_黄忠,/*老年*/1033,/*高位青年*/1034,/*高位老年*/1035},
	{武将_司马懿,/*老年*/1036,/*高位青年*/1037,/*高位老年*/1038},
	{武将_周瑜,/*老年*/1039,/*高位青年*/1040,/*高位老年*/1041},
	{武将_祝融,/*老年*/-1,/*高位青年*/1042,/*高位老年*/-1},
	{武将_荀彧,/*老年*/1043,/*高位青年*/1044,/*高位老年*/1045},
	{武将_荀攸,/*老年*/-1,/*高位青年*/1046,/*高位老年*/1047},
	{武将_诸葛亮,/*老年*/1048,/*高位青年*/-1,/*高位老年*/-1},
	{武将_徐晃,/*老年*/1049,/*高位青年*/1050,/*高位老年*/1051},
	{武将_徐庶,/*老年*/-1,/*高位青年*/1052,/*高位老年*/1053},
	{武将_曹叡,/*老年*/-1,/*高位青年*/1054,/*高位老年*/-1},
	{武将_曹洪,/*老年*/-1,/*高位青年*/1055,/*高位老年*/1056},
	{武将_曹仁,/*老年*/-1,/*高位青年*/1057,/*高位老年*/1058},
	{武将_曹操,/*老年*/1059,/*高位青年*/1060,/*高位老年*/1061},
	{武将_曹丕,/*老年*/-1,/*高位青年*/1062,/*高位老年*/1063},
	{武将_孙坚,/*老年*/-1,/*高位青年*/1064,/*高位老年*/1065},
	{武将_孙权,/*老年*/1066,/*高位青年*/1067,/*高位老年*/1068},
	{武将_孙策,/*老年*/1069,/*高位青年*/1070,/*高位老年*/1071},
	{武将_孙尚香,/*老年*/1072,/*高位青年*/-1,/*高位老年*/-1},
	{武将_太史慈,/*老年*/-1,/*高位青年*/1073,/*高位老年*/1074},
	{武将_赵云,/*老年*/1075,/*高位青年*/1076,/*高位老年*/1077},
	{武将_张郃,/*老年*/1078,/*高位青年*/1079,/*高位老年*/1080},
	{武将_貂蝉,/*老年*/1081,/*高位青年*/-1,/*高位老年*/-1},
	{武将_张飞,/*老年*/1082,/*高位青年*/1083,/*高位老年*/1084},
	{武将_张辽,/*老年*/1085,/*高位青年*/1086,/*高位老年*/1087},
	{武将_程昱,/*老年*/-1,/*高位青年*/1088,/*高位老年*/1089},
	{武将_典韦,/*老年*/-1,/*高位青年*/1090,/*高位老年*/1091},
	{武将_邓艾,/*老年*/1092,/*高位青年*/1093,/*高位老年*/1094},
	{武将_董卓,/*老年*/-1,/*高位青年*/1095,/*高位老年*/1096},
	{武将_马岱,/*老年*/-1,/*高位青年*/1097,/*高位老年*/1098},
	{武将_马超,/*老年*/1099,/*高位青年*/1100,/*高位老年*/1101},
	{武将_文丑,/*老年*/-1,/*高位青年*/1102,/*高位老年*/1103},
	{武将_庞统,/*老年*/-1,/*高位青年*/1104,/*高位老年*/1105},
	{武将_庞德,/*老年*/-1,/*高位青年*/1106,/*高位老年*/1107},
	{武将_孟获,/*老年*/-1,/*高位青年*/1108,/*高位老年*/1109},
	{武将_陆逊,/*老年*/1110,/*高位青年*/1111,/*高位老年*/1112},
	{武将_李典,/*老年*/-1,/*高位青年*/1113,/*高位老年*/-1},
	{武将_刘禅,/*老年*/-1,/*高位青年*/1114,/*高位老年*/-1},
	{武将_刘备,/*老年*/1115,/*高位青年*/1116,/*高位老年*/1117},
	{武将_凌统,/*老年*/-1,/*高位青年*/1118,/*高位老年*/1119},
	{武将_吕布,/*老年*/1120,/*高位青年*/1151,/*高位老年*/1152},//注意吕布这里开始编号多了30
	{武将_吕蒙,/*老年*/1153,/*高位青年*/1154,/*高位老年*/1155},
	{武将_鲁肃,/*老年*/-1,/*高位青年*/1156,/*高位老年*/1157}
	};

	// ===========================================


	class Main
	{
		Main()
		{
			//pk::bind(107, pk::trigger107_t(callback));
			pk::bind(108, pk::trigger108_t(callback));//以月为单位变或许好点？
			pk::bind(203, pk::trigger203_t(callback));//原游戏中容貌变更的trigger，基本是以年为单位
			//pk::bind(102, -1, pk::trigger102_t(face_repair));
		}

		void face_repair()//因为已经在剧本里改过了，所以就不需要了
		{
			for (int i = 0; i < 武将_末; ++i)
			{
				pk::person@person = pk::get_person(i);
				if (pk::is_alive(person))
				{
					pk::set_face(person, i);
				}
			}
		}

		void callback()
		{
			face_change_set();
		}

		void face_change_set()
		{
			if (pk::get_scenario().no == 15) return;//排除血色剧本
			for (int i = 0; i < int(容貌设定.length); i++)
			{
				pk::person@ person_0 = pk::get_person(容貌设定[i][0]);
				//原老年头像设定
				if (person_0.face < 1000 and (person_0.old_age + person_0.birth - 1) > pk::get_year())
				{
					if (容貌设定[i][1] != -1)
					{
						pk::set_face(person_0, 容貌设定[i][1]);
						pk::model_change(person_0, true);//此函数用于武将头像变更后对应武将模型的变更
					}
				}
				////特殊君主以特殊方式判断高位
				if (person_0.mibun == 身份_君主)
				{
					if (容貌设定[i][0] == 武将_曹操 or 容貌设定[i][0] == 武将_刘备 or 容貌设定[i][0] == 武将_孙权 or 容貌设定[i][0] == 武将_孙坚 or 容貌设定[i][0] == 武将_孙策 or 容貌设定[i][0] == 武将_袁绍 or 容貌设定[i][0] == 武将_袁术 or 容貌设定[i][0] == 武将_吕布)
					{
						if (pk::get_scenario().no == 7 or pk::get_scenario().no == 13)
						{
							if (pk::get_force(person_0.get_force_id()).title <= 爵位_王)
							{
								if (容貌设定[i][2] != -1) pk::set_face(person_0, 容貌设定[i][2]);
							}
						}
						else if (pk::get_scenario().no != 7 and pk::get_scenario().no != 13)
						{
							if (pk::get_force(person_0.get_force_id()).title <= 爵位_王)
							{
								if (容貌设定[i][2] != -1) pk::set_face(person_0, 容貌设定[i][2]);

								if (person_0.old_age != 255 and (person_0.old_age + person_0.birth - 1) > pk::get_year())
								{
									if (容貌设定[i][3] != -1) pk::set_face(person_0, 容貌设定[i][3]);
								}
								else if (person_0.old_age == 255 and pk::get_year() >= (person_0.birth + 49))
								{
									if (容貌设定[i][3] != -1) pk::set_face(person_0, 容貌设定[i][3]);
								}
							}
						}
						continue;//对应君主经过这里判断后会跳到下一位
					}
				}
				//非特殊君主的情况
				if (pk::get_scenario().no == 7 or pk::get_scenario().no == 13)
				{
					if ((person_0.kouseki >= 功绩门槛) and (person_0.rank <= 官职条件))//官职越大，数字越小
					{
						if (容貌设定[i][2] != -1) pk::set_face(person_0, 容貌设定[i][2]);
					}
				}
				else if (pk::get_scenario().no != 7 and pk::get_scenario().no != 13)
				{
					if ((person_0.kouseki >= 功绩门槛) and (person_0.rank <= 官职条件))
					{
						if (person_0.old_age != 255 and (person_0.old_age + person_0.birth - 1) <= pk::get_year())
							if (容貌设定[i][2] != -1) pk::set_face(person_0, 容貌设定[i][2]);

						if (person_0.old_age != 255 and (person_0.old_age + person_0.birth - 1) > pk::get_year())
						{
							if (容貌设定[i][3] != -1) pk::set_face(person_0, 容貌设定[i][3]);
						}
						else if (person_0.old_age == 255 and pk::get_year() >= (person_0.birth + 49))
						{
							if (容貌设定[i][3] != -1) pk::set_face(person_0, 容貌设定[i][3]);
						}
					}
				}

			}
		}

	} // class Main

	Main main;

} // namespace
